/*
Очень удобен && || , что при проверке уже первого условия,
 он сразу определяет, нужно ли проверять второе значение
 или достаточно проверить первое. Данные методы ускоряют проверку входных данных.

Операторы | и || - это логические операторы ИЛИ.
Работает так: если хотя бы одно условие true, то все результат true.
 Т.е., если одно условие false, а другое - true, то результат true.

Операторы & и && - это логические операторы И.
Работает так: если хотя бы одно условие false, то результат - false.
Т.е, чтобы результат был true, надо чтобы оба условия были true.
 */
/*
Очерёдность действий в логических выражениях
Обработка логических выражений производится в соответствии с законами математической (булевой) логики.

    1. Сначала выполняются действия в круглых скобках.
    2. Затем выполняются операции логического отрицания (!)
    3. Далее выполняются операции логического И (&&)
    4. В последнюю очередь выполняются операции логического ИЛИ (||).

В том случае, если имеется несколько операций одной очерёдности,
они исполняются слева направо. Отдельно нужно помнить, что математические операции
и операции сравнения производятся ДО логических операций
 */

import java.util.Scanner;

/*
Рассмотрим пример:

    boolean a = true;
    boolean b = false;
    int c = 30;
    int q = 5;

    boolean r = (a || b && c >= 25) || (c < 20 * q) && !(q == 5);

Как можно видеть, r представляет собой непонятную конструкцию,
однако, всё не так плохо, как кажется, если воспользоваться вышеизложенными правилами.

1. Сначала выполняем операции в скобках. Выражений в скобках у нас три,
значит, выполним их слева направо.
2. Выражение в первой паре скобок (a || b && c >= 25). Внутри него также несколько операций.

    а) выполняем оперцию сравнения c >= 25. Поскольку c == 30, то это true;

    б) выполняем логическое И: b && c >= 25. b == false, а c >= 25 - это true (см. п. 1а).
    Следовательно, b && c >= 25 - это false;

    в) выполняем логическое ИЛИ: a == true, b && c >= 25 - это false (см. п. 1б).
    Следовательно, (a || b && c >= 25) - это true.

Значение в первой паре скобок равно true.

2. Выражение по второй паре скобок (c < 20 * q).

    а) выполняем арифметическую операцию 20 * q ==100;

    б) выполняем сравнение c < 100 - это true.

Значение во второй паре скобок также true.

3. Выражение в третьей паре скобок (q == 5). Тут всё просто, это true.

Таким образом, обработав значения в скобках, мы преобразовали выражение в более простое:

boolean r = true || true && !true;
4. Следующие по очереди - операции отрицания. Она одна, выполним её:

boolean r = true || true && false;
5. Далее выполняем операцию логического И, true && false == false:

boolean r = true || false;
6. Ну и, наконец, получаем окончательный результат, выполнив последнюю оставшуюся операцию:

boolean r = true;
 */
public class LogicalConstructions {
    public static void andOperators(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt(), num2 = sc.nextInt();
        System.out.println(((num1 + num2) % 2 == 0) & (num1 * num2 % 2 != 0) ? "YES" : "NO");
    }

    public static void orOperators(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(str.length() < 20 || str.contains(sc.nextLine()) ? "YES" : "NO");
    }

    public static void taskThreeNumbers(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println(sc.nextInt() % 2 + sc.nextInt() % 2 + sc.nextInt() % 2 == 1);

    }

    public static void validationOfYear(String[] args) {
        Scanner sc = new Scanner(System.in);
        int days = sc.nextInt(), month = sc.nextInt(), year = sc.nextInt();
        /*System.out.println((days > 0 && month > 0  && year > 0)
                & (((month == 2) & (days <= 29) || (days <= 31 & month <= 12 & month != 2))
                && ((year % 400 == 0 | year % 4 == 0) & year % 100 != 0))
                || (month==2 & days <= 28 & (year % 100 == 0 || year % 100 != 0))
                || (year % 4 != 0 & year % 100 != 0 & month <= 12 & days <= 31 ));*/
/*        System.out.println(
                (days > 0 && month > 0  && year > 0)
                        && ((((year % 4 == 0 && year % 100 == 0 && year % 400 != 0) || (year % 100 != 0 && year % 4 !=0))
                        & ((month == 2 && days <= 28) || (month <= 12 & month != 2 & days <=31)))
                        ||((year % 4 == 0 && year % 100 != 0 ) || (year % 400 == 0 && year % 100 == 0))
                        && ((month == 2 && days <= 29) || (days <= 31 && month <= 12 && month != 2)))
                        );
 */
        System.out.println(
                (days > 0 && month > 0 && year > 0)
                        &&
                        ((days <= 30 && (month == 4 || month == 6 || month == 9 || month == 11))
                                ||
                                (days <= 31 && (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)))
                        || month == 2 &&
                        ((days == 28 && ((year % 4 == 0 && year % 100 == 0 && year % 400 != 0) || (year % 100 != 0 && year % 4 != 0)))) ||
                        (days == 29 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0 && year % 100 == 0)))


        );


    }

    public static void alphabet(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next(), b = sc.next(), c = sc.next();
        char strA = a.charAt(0), strB = b.charAt(0), strC = c.charAt(0);
        if (strA < strB & strB < strC & strA < strB) {
            System.out.printf("%s\n%s\n%s", a, b, c);
        }
        if (strA < strB & strB > strC & strA < strC) {
            System.out.printf("%s\n%s\n%s", a, c, b);
        }
        if (strB < strC & strB < strA & strA < strC) {
            System.out.printf("%s\n%s\n%s", b, a, c);
        }
        if (strB < strC & strA > strC & strA > strB) {
            System.out.printf("%s\n%s\n%s", b, c, a);
        }
        if (strC < strA & strA < strB & strC < strB) {
            System.out.printf("%s\n%s\n%s", c, a, b);
        }
        if (strC < strA & strA > strB & strC < strB) {
            System.out.printf("%s\n%s\n%s", c, b, a);
        }
    }

    public static void alphabetCool(String[] args) {
        Scanner sc=new Scanner (System.in);
        String a= sc.next(),
                b=sc.next(),
                c=sc.next(), x;
        if (a.charAt(0)>b.charAt(0)){x=a;a=b;b=x;}
        if (b.charAt(0)>c.charAt(0)){x=b;b=c;c=x;}
        if (a.charAt(0)>b.charAt(0)){x=a;a=b;b=x;}

        System.out.print(a+"\n"+b+"\n"+c);
    }
}
